package logger

import (
	"os"

	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

var log *zap.Logger

func Init() {
	// 1. 读取环境：EGM_LOG_ENV=dev|prod（默认 dev）
	env := os.Getenv("EGM_LOG_ENV")
	if env == "" {
		env = "dev"
	}

	// 2. 根据环境设置日志级别
	var level zapcore.Level
	switch env {
	case "prod":
		level = zapcore.WarnLevel // 生产：只输出 WARN 及以上（不输出 INFO/DEBUG）
	case "dev", "development":
		level = zapcore.DebugLevel // 开发：输出所有
	default:
		level = zapcore.InfoLevel // 默认 info
	}

	// 3. 是否使用 console 格式（开发用 console，生产用 JSON）
	useConsole := env == "dev" || env == "development"

	// 4. Encoder 配置
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.TimeKey = "time"
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder

	var encoder zapcore.Encoder
	if useConsole {
		// 开发：console 编码器（彩色、对齐）
		encoderConfig := zap.NewDevelopmentEncoderConfig()
		encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
		encoder = zapcore.NewConsoleEncoder(encoderConfig)
	} else {
		// 生产：JSON 编码器
		encoder = zapcore.NewJSONEncoder(encoderConfig)
	}

	// 5. 创建 logger
	core := zapcore.NewCore(encoder, zapcore.Lock(os.Stdout), level)
	log = zap.New(core, zap.AddCaller())
}

func GetLogger() *zap.Logger {
	return log
}

func Debug(msg string, fields ...zap.Field) { log.Debug(msg, fields...) }
func Info(msg string, fields ...zap.Field)  { log.Info(msg, fields...) }
func Warn(msg string, fields ...zap.Field)  { log.Warn(msg, fields...) }
func Error(msg string, fields ...zap.Field) { log.Error(msg, fields...) }
func Fatal(msg string, fields ...zap.Field) { log.Fatal(msg, fields...) }
